﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using NetOffice.WordApi;
using System.IO;
using NetOffice.WordApi.Enums;
using Word = NetOffice.WordApi;
using Lumberjack.BusinessLogic;

namespace Lumberjack
{
    /// <summary>
    /// Interaction logic for CompetitionWindow.xaml
    /// </summary>
    public partial class CompetitionWindow : System.Windows.Window
    {

        private static readonly log4net.ILog log = log4net.LogManager.GetLogger
        (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        enum ResultType { Bool = 0, Normal = 1, Ranged = 2 };
        public static ObservableCollection<Competitor> competitors = new ObservableCollection<Competitor>();
        public static int currentTab = 1;
        public static int currentRound = 1;
        public static Contest contest;
        IRepository<Contest> _contestService;
        IRepository<Competitor> _competitorService;
        IRepository<Result_b> _resultBService;
        IRepository<Result_n> _resultNService;
        IRepository<Rule> _ruleService;
        IRepository<Rule_b> _ruleBService;
        IRepository<Rule_n> _ruleNService;
        IRepository<Rule_r> _ruleRService;

        public CompetitionWindow(Contest cont, bool loadContest = false)
        {
            InitializeComponent();
            lv_competitors.ItemsSource = competitors;
            contest = cont;

            //ent = MainWindow.context;
            _contestService = new RepositoryService<Contest>(MainWindow.context);
            _competitorService = new RepositoryService<Competitor>(MainWindow.context);
            _resultBService = new RepositoryService<Result_b>(MainWindow.context);
            _resultNService = new RepositoryService<Result_n>(MainWindow.context);
            _ruleService = new RepositoryService<Rule>(MainWindow.context);
            _ruleBService = new RepositoryService<Rule_b>(MainWindow.context);
            _ruleNService = new RepositoryService<Rule_n>(MainWindow.context);
            _ruleRService = new RepositoryService<Rule_r>(MainWindow.context);
            //selection of a current tab based on what competitions are available
            if (cont.competition_1 < 1)
            {
                tiCompetition1.IsEnabled = false;
            }
            if (cont.competition_2 < 1)
            {
                tiCompetition2.IsEnabled = false;
            }
            if (cont.competition_3 < 1)
            {
                tiCompetition3.IsEnabled = false;
            }
            if (cont.competition_4 < 1)
            {
                tiCompetition4.IsEnabled = false;
            }
            if (cont.competition_5 < 1)
            {
                tiCompetition5.IsEnabled = false;
            }
            tiCompetition1.IsSelected = true;

            
            if (tiCompetition1.IsEnabled == false)
            {
                tiCompetition2.IsSelected = true;
                currentTab = 2;
            }
            if (tiCompetition2.IsEnabled == false && tiCompetition2.IsSelected == true)
            {
                tiCompetition3.IsSelected = true;
                currentTab = 3;
            }
            if (tiCompetition3.IsEnabled == false && tiCompetition3.IsSelected == true)
            {
                tiCompetition4.IsSelected = true;
                currentTab = 4;
            }
            if (tiCompetition4.IsEnabled == false && tiCompetition4.IsSelected == true)
            {
                tiCompetition5.IsSelected = true;
                currentTab = 5;
            }


            if (!loadContest)
            {
                i_grid.Visibility = System.Windows.Visibility.Hidden;
                ii_grid.Visibility = System.Windows.Visibility.Hidden;
                iii_grid.Visibility = System.Windows.Visibility.Hidden;
                iv_grid.Visibility = System.Windows.Visibility.Hidden;
                v_grid.Visibility = System.Windows.Visibility.Hidden;
            }
            else
            {
                List<Competitor> cl = _competitorService.GetAll().Where(s => s.id_contest == cont.Id).ToList();
                foreach (var s in cl)
                {
                    competitors.Add(s);
                }

                reloadAllContest();
            }

            //prevents pasting objects into textboxes
            DataObject.AddPastingHandler(i_czas_scinki, OnPasteCommand);
            DataObject.AddPastingHandler(i_odchylenie_drzewa_od_palika, OnPasteCommand);
            DataObject.AddPastingHandler(i_glebokosc_podciecia, OnPasteCommand);
            DataObject.AddPastingHandler(i_kat_podciecia, OnPasteCommand);
            DataObject.AddPastingHandler(i_szerokosc_zawiasy_min, OnPasteCommand);
            DataObject.AddPastingHandler(i_szerokosc_zawiasy_max, OnPasteCommand);
            DataObject.AddPastingHandler(i_wysokosc_progu_min, OnPasteCommand);
            DataObject.AddPastingHandler(i_wysokosc_progu_max, OnPasteCommand);
            DataObject.AddPastingHandler(i_praca_bez_kasku_ile_razy, OnPasteCommand);
        }

        private void OnPasteCommand(object sender, DataObjectEventArgs e)
        {
            e.CancelCommand();
        }

        public void userAdded()
        {
            i_grid.Visibility = System.Windows.Visibility.Visible;
            ii_grid.Visibility = System.Windows.Visibility.Visible;
            iii_grid.Visibility = System.Windows.Visibility.Visible;
            iv_grid.Visibility = System.Windows.Visibility.Visible;
            v_grid.Visibility = System.Windows.Visibility.Visible;
            lv_competitors.SelectedIndex = competitors.Count - 1;
        }

        private void bAddCompetitor_Click(object sender, RoutedEventArgs e)
        {
            AddCompetitor ac = new AddCompetitor(userAdded);
            ac.Show();
        }


        private void bDeleteCompetitor_Click(object sender, RoutedEventArgs e)
        {
            if (lv_competitors.SelectedItem == null)
            {
                MessageBox.Show("Nie zaznaczyłeś żadnego użytkownika!", "Brak zaznaczenia", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            try
            {
                MessageBoxResult mr = MessageBox.Show("Czy na pewno chcesz usunąć tego zawodnika?", "Usuń zawodnika", MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (mr == MessageBoxResult.Yes)
                {
                    Competitor comp = lv_competitors.SelectedItem as Lumberjack.Competitor;
                    Competitor competitor = _competitorService.GetById(comp.Id);
                    competitors.Remove(competitor);
                    _competitorService.Delete(competitor);

                    lv_competitors.SelectedIndex = 0;

                    if (competitors.Count == 0)
                    {
                        i_grid.Visibility = System.Windows.Visibility.Hidden;
                        ii_grid.Visibility = System.Windows.Visibility.Hidden;
                        iii_grid.Visibility = System.Windows.Visibility.Hidden;
                        iv_grid.Visibility = System.Windows.Visibility.Hidden;
                        v_grid.Visibility = System.Windows.Visibility.Hidden;
                    }
                }
            }
            catch(Exception ex)
            {
                log.Error(ex.Message, ex);
                MessageBox.Show("Wystąpił błąd przy próbie usunięcia zawodnika!", "Błąd", MessageBoxButton.OK, MessageBoxImage.Error);
            }

        }


        private void saveResult(string ruleName, string value, ResultType resultType)
        {
            if ( string.IsNullOrEmpty(ruleName) || lv_competitors.SelectedItem == null) 
            {
                return;
            }

            double tmp;
            double? _value;
            if (double.TryParse(value,out tmp))
            {
                _value = tmp;
            }
            else if(value == "")
            {
                _value = null;
            }
            else
            {
                return;
            }
            Competitor competitor = lv_competitors.SelectedItem as Competitor;

            if (resultType == ResultType.Normal)
            {
                var _result = _resultNService.GetAll().Where(t => t.Competitor.Id == competitor.Id &&
                    ruleName == t.Rule.C_name && t.round == currentRound).FirstOrDefault();

                //change value
                if (_result != null)
                {
                    _result.value = _value;
                    _resultNService.Update(_result);
                }
                else
                {
                    //add value
                    Result_n result = new Result_n()
                    {
                        Competitor = competitor,
                        Rule = _ruleService.GetAll().Where(s => s.C_name == ruleName).FirstOrDefault(),
                        round = currentRound,
                        value = _value
                    };
                    _resultNService.Insert(result);
                }
            }
            else if (resultType == ResultType.Bool)
            {
                var res = _resultBService.GetAll().Where(s => s.Competitor.Id == competitor.Id &&
                    ruleName == s.Rule.C_name && s.round == currentRound && s.competition == currentTab).FirstOrDefault();
                if (res != null)
                {
                      res.value = (byte?)_value;
                      _resultBService.Update(res);
                }
                else if(_value != 0)
                {
                    Result_b result = new Result_b()
                    {
                        Competitor = competitor,
                        Rule = _ruleService.GetAll().Where(s => s.C_name == ruleName).FirstOrDefault(),
                        competition = currentTab,
                        round = currentRound,
                        value = (byte?)_value
                    };
                    _resultBService.Insert(result);
                }
            }
        }


#region i_competition

        private void iCompetitionCountPoints()
        {
            try
            {

                Competitor comp = lv_competitors.SelectedItem as Competitor;
                Competitor competitor = _competitorService.GetById(comp.Id);
                int round = Convert.ToInt16(lbRound.Content);

                int? points = 0;

                ContestRuleEvaluator ruleEval = new ContestRuleEvaluator();

                ruleEval.x_between_two_values(i_czas_scinki.Text, RuleName.czas_scinki, ref points);

                ruleEval.value_minus_x_above_zero(i_odchylenie_drzewa_od_palika.Text, RuleName.odchylenie_drzewa_od_palika, ref points);

                if (i_ciecie_poziome_z_dolu.IsChecked == false)
                {
                    ruleEval.x_between_two_values_or_equal(i_glebokosc_podciecia.Text, RuleName.glebokosc_podciecia, ref points);

                    ruleEval.x_between_two_values_or_equal(i_kat_podciecia.Text, RuleName.kat_podciecia, ref points);

                }
                if (!string.IsNullOrEmpty(i_szerokosc_zawiasy_min.Text) && (!string.IsNullOrEmpty(i_szerokosc_zawiasy_max.Text)))
                {
                    ruleEval.two_xs_between_values_or_equal(i_szerokosc_zawiasy_min.Text, i_szerokosc_zawiasy_max.Text,
                        RuleName.szerokosc_zawiasy_min, RuleName.szerokosc_zawiasy_max, ref points);
                }
                
                if (!string.IsNullOrEmpty(i_wysokosc_progu_min.Text) && (!string.IsNullOrEmpty(i_wysokosc_progu_max.Text)))
                {
                    ruleEval.two_xs_between_values_or_equal(i_wysokosc_progu_min.Text, i_wysokosc_progu_max.Text,
                        RuleName.wysokosc_progu_min, RuleName.wysokosc_progu_max, ref points);
                }

              
                if (i_zla_wysokosc_pnia.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zla_wysokosc_pnia, ref points);
                }
                if (i_zle_ocylindrowanie_drzewa.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zle_ocylindrowanie_drzewa, ref points);
                }
                if (i_pekniecie_odziomka.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.pekniecie_odziomka, ref points);
                }
                if (i_niebezpieczne_zachowanie_podczas_scinki.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.niebezpieczne_zachowanie_podczas_scinki, ref points);
                }
                if (i_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, ref points);
                }
                if (i_nieprawidlowe_odejscie_od_drzewa.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.nieprawidlowe_odejscie_od_drzewa, ref points);
                }
                if (i_praca_bez_kasku.IsChecked == true && !string.IsNullOrEmpty(i_praca_bez_kasku_ile_razy.Text))
                {
                    ruleEval.x_is_true_multiplied(RuleName.praca_bez_kasku, i_praca_bez_kasku_ile_razy.Text, ref points);
                }
                if (i_nieprawidlowe_uruchomienie_pilarki.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.nieprawidlowe_uruchomienie_pilarki, ref points);
                }
                if (i_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, ref points);
                }
                if (i_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, ref points);
                }
                if (i_przechodzenie_z_lancuchem_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przechodzenie_z_lancuchem_w_ruchu, ref points);
                }
                if (i_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, ref points);
                }
                if (i_obrazenia_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_wymagajace_pomocy_medycznej, ref points);
                }
                if (i_zawieszenie_drzewa.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zawieszenie_drzewa, ref points);
                }
                if (i_zawieszenie_drzewa_pomocniczego.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zawieszenie_drzewa_pomocniczego, ref points);
                }

                if (i_dyskwalifikacja.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dyskwalifikacja, ref points); 
                }

                if (points < 0)
                {
                    points = 0;
                }

                i_punkty.Content = points.ToString();

                Competitor c = lv_competitors.SelectedItem as Competitor;
                c.punkty1 = points.ToString();

            //    highlightTheBest();


            }
            catch (FormatException ex)
            {
                log.Error(ex.Message, ex);
                Competitor d = lv_competitors.SelectedItem as Competitor;
                d.punkty1 = "nieprawidłowe dane";
                i_punkty.Content = "nieprawidłowe dane";
                MessageBox.Show("Nie można obliczyć ilości punktów ponieważ w którymś polu podane są nieprawidłowe dane.", "Nieprawidłowe dane", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        
        private void i_czas_scinki_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_czas_scinki);
        }

        private void i_czas_scinki_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.czas_scinki, i_czas_scinki.Text, ResultType.Normal);
            Competitor d = lv_competitors.SelectedItem as Competitor;
            d.czas1 = i_czas_scinki.Text;
            iCompetitionCountPoints();
        }

        private void i_odchylenie_drzewa_od_palika_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_odchylenie_drzewa_od_palika);
        }

        private void i_odchylenie_drzewa_od_palika_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_drzewa_od_palika, i_odchylenie_drzewa_od_palika.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_glebokosc_podciecia_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_glebokosc_podciecia);
        }

        private void i_glebokosc_podciecia_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.glebokosc_podciecia, i_glebokosc_podciecia.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_kat_podciecia_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_kat_podciecia);
        }

        private void i_kat_podciecia_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.kat_podciecia, i_kat_podciecia.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_szerokosc_zawiasy_min_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_szerokosc_zawiasy_min);
        }

        private void i_szerokosc_zawiasy_min_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.szerokosc_zawiasy_min, i_szerokosc_zawiasy_min.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_szerokosc_zawiasy_max_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_szerokosc_zawiasy_max);

        }

        private void i_szerokosc_zawiasy_max_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.szerokosc_zawiasy_max, i_szerokosc_zawiasy_max.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_wysokosc_progu_min_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_wysokosc_progu_min);

        }

        private void i_wysokosc_progu_min_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.wysokosc_progu_min, i_wysokosc_progu_min.Text , ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_wysokosc_progu_max_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_wysokosc_progu_max);

        }

        private void i_wysokosc_progu_max_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.wysokosc_progu_max, i_wysokosc_progu_max.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }

        private void i_praca_bez_kasku_ile_razy_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, i_praca_bez_kasku_ile_razy);
        }

        private void i_praca_bez_kasku_ile_razy_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.praca_bez_kasku_ile, i_praca_bez_kasku_ile_razy.Text, ResultType.Normal);
            iCompetitionCountPoints();
        }


        private void i_ciecie_poziome_z_dolu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.ciecie_poziome_z_dolu, (bool)i_ciecie_poziome_z_dolu.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_zla_wysokosc_pnia_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zla_wysokosc_pnia, (bool)i_zla_wysokosc_pnia.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_zle_ocylindrowanie_drzewa_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zle_ocylindrowanie_drzewa, (bool)i_zle_ocylindrowanie_drzewa.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_pekniecie_odziomka_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pekniecie_odziomka, (bool)i_pekniecie_odziomka.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_niebezpieczne_zachowanie_podczas_scinki_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.niebezpieczne_zachowanie_podczas_scinki, (bool)i_niebezpieczne_zachowanie_podczas_scinki.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_wejscie_na_miejsce_konkurencji_bez_wezwania_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, (bool)i_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();

        }

        private void i_nieprawidlowe_odejscie_od_drzewa_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nieprawidlowe_odejscie_od_drzewa, (bool)i_nieprawidlowe_odejscie_od_drzewa.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_praca_bez_kasku_Click(object sender, RoutedEventArgs e)
        {
            if (i_praca_bez_kasku.IsChecked == true )
            {
                saveResult(RuleName.praca_bez_kasku, "1", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, i_praca_bez_kasku_ile_razy.Text, ResultType.Bool);
                i_praca_bez_kasku_ile_razy.IsEnabled = true;
            }
            else
            {
                saveResult(RuleName.praca_bez_kasku, "0", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, i_praca_bez_kasku_ile_razy.Text, ResultType.Bool);
                i_praca_bez_kasku_ile_razy.IsEnabled = false;
            }
            iCompetitionCountPoints();
        }

        private void i_nieprawidlowe_uruchomienie_pilarki_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nieprawidlowe_uruchomienie_pilarki, (bool)i_nieprawidlowe_uruchomienie_pilarki.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, (bool)i_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, (bool)i_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_przechodzenie_z_lancuchem_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przechodzenie_z_lancuchem_w_ruchu, (bool)i_przechodzenie_z_lancuchem_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_obrazenia_nie_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, (bool)i_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_obrazenia_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_wymagajace_pomocy_medycznej, (bool)i_obrazenia_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

        private void i_zawieszenie_drzewa_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zawieszenie_drzewa, (bool)i_zawieszenie_drzewa.IsChecked ? "1" : "0", ResultType.Bool);
            if (i_zawieszenie_drzewa.IsChecked == true)
            {
                i_zawieszenie_drzewa_pomocniczego.IsEnabled = true;
            }
            else
            {
                i_zawieszenie_drzewa_pomocniczego.IsEnabled = false;
                i_zawieszenie_drzewa_pomocniczego.IsChecked = false;
                saveResult(RuleName.zawieszenie_drzewa_pomocniczego, (bool)i_zawieszenie_drzewa_pomocniczego.IsChecked ? "1" : "0", ResultType.Bool);

            }
            iCompetitionCountPoints();
        }

        private void i_zawieszenie_drzewa_pomocniczego_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zawieszenie_drzewa_pomocniczego, (bool)i_zawieszenie_drzewa_pomocniczego.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }


        private void i_dyskwalifikacja_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dyskwalifikacja, (bool)i_dyskwalifikacja.IsChecked ? "1" : "0", ResultType.Bool);
            iCompetitionCountPoints();
        }

       
        private void lv_competitors_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (bResults.Content.ToString() == "Konkurs")
                return;

            reloadCurrentCompetitor();

        }


        private void iCompetitionChanged()
        {
            if (lv_competitors.SelectedItem == null)
            {
                return;
            }

            i_czas_scinki.Text = "";
            i_odchylenie_drzewa_od_palika.Text = "";
            i_glebokosc_podciecia.Text = "";
            i_kat_podciecia.Text = "";
            i_szerokosc_zawiasy_min.Text = "";
            i_szerokosc_zawiasy_max.Text = "";
            i_wysokosc_progu_min.Text = "";
            i_wysokosc_progu_max.Text = "";
            i_punkty.Content = "";
            i_praca_bez_kasku_ile_razy.Text = "";
            i_ciecie_poziome_z_dolu.IsChecked = false;
            i_zla_wysokosc_pnia.IsChecked = false;
            i_zle_ocylindrowanie_drzewa.IsChecked = false;
            i_pekniecie_odziomka.IsChecked = false;
            i_niebezpieczne_zachowanie_podczas_scinki.IsChecked = false;
            i_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = false;
            i_nieprawidlowe_odejscie_od_drzewa.IsChecked = false;
            i_nieprawidlowe_uruchomienie_pilarki.IsChecked = false;
            i_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = false;
            i_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = false;
            i_przechodzenie_z_lancuchem_w_ruchu.IsChecked = false;
            i_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = false;
            i_obrazenia_wymagajace_pomocy_medycznej.IsChecked = false;
            i_zawieszenie_drzewa.IsChecked = false;
            i_zawieszenie_drzewa_pomocniczego.IsChecked = false;
            i_praca_bez_kasku_ile_razy.IsEnabled = false;
            i_praca_bez_kasku.IsChecked = false;
            i_dyskwalifikacja.IsChecked = false;

            int? round = Convert.ToInt32(lbRound.Content);
            Competitor competitor = lv_competitors.SelectedItem as Competitor;
            competitor.punkty = "0";
            competitor.czas = "0";


            var resultsN = _resultNService.GetAll().Where(s => s.Competitor.Id == competitor.Id && s.round == round);
            var resultsB = _resultBService.GetAll().Where(s => s.Competitor.Id == competitor.Id && s.round == round &&
                s.competition == currentTab).ToList();

            foreach (Result_n r in resultsN)
            {
                if (r.Rule.C_name == RuleName.czas_scinki)
                {
                    i_czas_scinki.Text = r.value.ToString() ?? "0";
                    competitor.czas1 = i_czas_scinki.Text;
                }
                else if (r.Rule.C_name == RuleName.odchylenie_drzewa_od_palika)
                {
                    i_odchylenie_drzewa_od_palika.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.glebokosc_podciecia)
                {
                    i_glebokosc_podciecia.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.kat_podciecia)
                {
                    i_kat_podciecia.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.szerokosc_zawiasy_min)
                {
                    i_szerokosc_zawiasy_min.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.szerokosc_zawiasy_max)
                {
                    i_szerokosc_zawiasy_max.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.wysokosc_progu_min)
                {
                    i_wysokosc_progu_min.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.wysokosc_progu_max)
                {
                    i_wysokosc_progu_max.Text = r.value.ToString() ?? "0";
                }
            }


           

            foreach (Result_b r in resultsB)
            {
                if (r.Rule.C_name == RuleName.zla_wysokosc_pnia && r.value == 1)
                {
                    i_zla_wysokosc_pnia.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.ciecie_poziome_z_dolu && r.value == 1)
                {
                    i_ciecie_poziome_z_dolu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.zle_ocylindrowanie_drzewa && r.value == 1)
                {
                    i_zle_ocylindrowanie_drzewa.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pekniecie_odziomka && r.value == 1)
                {
                    i_pekniecie_odziomka.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.niebezpieczne_zachowanie_podczas_scinki && r.value == 1)
                {
                    i_niebezpieczne_zachowanie_podczas_scinki.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania && r.value == 1)
                {
                    i_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.nieprawidlowe_odejscie_od_drzewa && r.value == 1)
                {
                    i_nieprawidlowe_odejscie_od_drzewa.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.nieprawidlowe_uruchomienie_pilarki && r.value == 1)
                {
                    i_nieprawidlowe_uruchomienie_pilarki.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut && r.value == 1)
                {
                    i_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu && r.value == 1)
                {
                    i_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przechodzenie_z_lancuchem_w_ruchu && r.value == 1)
                {
                    i_przechodzenie_z_lancuchem_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_nie_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    i_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    i_obrazenia_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.zawieszenie_drzewa && r.value == 1)
                {
                    i_zawieszenie_drzewa.IsChecked = true;
                    i_zawieszenie_drzewa_pomocniczego.IsEnabled = true;
                }
                else if (r.Rule.C_name == RuleName.zawieszenie_drzewa_pomocniczego && r.value == 1)
                {
                    i_zawieszenie_drzewa_pomocniczego.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.dyskwalifikacja && r.value == 1)
                {
                    i_dyskwalifikacja.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.praca_bez_kasku && r.value == 1)
                {
                    i_praca_bez_kasku.IsChecked = true;
                    i_praca_bez_kasku_ile_razy.IsEnabled = true;
                    i_praca_bez_kasku_ile_razy.Text = _resultNService.GetAll().Where(s => s.Rule.C_name == RuleName.praca_bez_kasku_ile &&
                    s.Competitorid == competitor.Id && s.round == round).FirstOrDefault().value.ToString();
                }
            }

            iCompetitionCountPoints();

        }

#endregion i_competition


#region ii_competition

        private void iiCompetitionCountPoints()
        {
            try
            {
                int? points = 0;

                ContestRuleEvaluator ruleEval = new ContestRuleEvaluator();

                if (!string.IsNullOrEmpty(ii_czas_wykonania_zadania_2.Text))
                {
                    ruleEval.x_second_competition(ii_czas_wykonania_zadania_2.Text, RuleName.czas_wykonania_zadania_2, ref points);
                }

                if (!string.IsNullOrEmpty(ii_seki_powyzej_5_mm.Text))
                {
                    ruleEval.x_multiply_by_points(ii_seki_powyzej_5_mm.Text, RuleName.seki_powyzej_5_mm, ref points);
                }

                if (!string.IsNullOrEmpty(ii_zranienia_klody_ponad_5_mm.Text))
                {
                    ruleEval.x_multiply_by_points(ii_zranienia_klody_ponad_5_mm.Text, RuleName.zranienia_klody_ponad_5_mm, ref points);
                }

                if (!string.IsNullOrEmpty(ii_pozostawienie_kola_w_strefie_okrzesywania.Text))
                {
                    ruleEval.x_multiply_by_points(ii_pozostawienie_kola_w_strefie_okrzesywania.Text, RuleName.pozostawienie_kola_w_strefie_okrzesywania, ref points);
                }

                if (ii_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przechodzenie_z_lancuchem_w_ruchu, ref points);
                }

                if (ii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, ref points);
                }
                if (ii_praca_bez_kasku.IsChecked == true && !string.IsNullOrEmpty(ii_ile_razy.Text))
                {
                    ruleEval.x_is_true_multiplied(RuleName.praca_bez_kasku, ii_ile_razy.Text, ref points);
                }

                if (ii_nieprawidlowe_uruchomienie_pilarki.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.nieprawidlowe_uruchomienie_pilarki, ref points);
                }

                if (ii_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, ref points);
                }

                if (ii_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, ref points);
                }

                if (ii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, ref points);
                }

                if (ii_obrazenia_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_wymagajace_pomocy_medycznej, ref points);
                }

                if (ii_zla_postawa_przy_okrzesywaniu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zla_postawa_przy_okrzesywaniu, ref points);
                }

                if (ii_dyskwalifikacja.IsChecked == true)
                {

                    ruleEval.x_is_true(RuleName.dyskwalifikacja, ref points);
                }

                if (points < 0)
                {
                    points = 0;
                }

                ii_punkty.Content = points.ToString();
                Competitor c = lv_competitors.SelectedItem as Competitor;
                c.punkty2 = ii_punkty.Content.ToString();

           //     highlightTheBest();
            }
            catch (FormatException ex)
            {
                log.Error(ex.Message, ex);
                Competitor d = lv_competitors.SelectedItem as Competitor;
                d.punkty2 = "nieprawidłowe dane";
                ii_punkty.Content = "nieprawidłowe dane";
                MessageBox.Show("Nie można obliczyć ilości punktów ponieważ w którymś polu podane są nieprawidłowe dane.", "Nieprawidłowe dane", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void ii_czas_wykonania_zadania_2_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, ii_czas_wykonania_zadania_2);
        }

        private void ii_czas_wykonania_zadania_2_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.czas_wykonania_zadania_2, ii_czas_wykonania_zadania_2.Text, ResultType.Normal);
            Competitor d =lv_competitors.SelectedItem as Competitor;
            d.czas2 = ii_czas_wykonania_zadania_2.Text;
            iiCompetitionCountPoints();
        }

        private void ii_seki_powyzej_5_mm_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, ii_seki_powyzej_5_mm);
        }

        private void ii_seki_powyzej_5_mm_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.seki_powyzej_5_mm, ii_seki_powyzej_5_mm.Text, ResultType.Normal);
            iiCompetitionCountPoints();
        }

        private void ii_zranienia_klody_ponad_5_mm_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, ii_zranienia_klody_ponad_5_mm);
        }

        private void ii_zranienia_klody_ponad_5_mm_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.zranienia_klody_ponad_5_mm, ii_zranienia_klody_ponad_5_mm.Text, ResultType.Normal);
            iiCompetitionCountPoints();
        }

        private void ii_pozostawienie_kola_w_strefie_okrzesywania_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, ii_pozostawienie_kola_w_strefie_okrzesywania);
        }

        private void ii_pozostawienie_kola_w_strefie_okrzesywania_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.pozostawienie_kola_w_strefie_okrzesywania, ii_pozostawienie_kola_w_strefie_okrzesywania.Text, ResultType.Normal);
            iiCompetitionCountPoints();
        }

        private void ii_przechodzenie_z_lancuchem_tnacym_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przechodzenie_z_lancuchem_w_ruchu, (bool)ii_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked ? "1" :"0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void ii_praca_bez_kasku_Click(object sender, RoutedEventArgs e)
        {
            if (ii_praca_bez_kasku.IsChecked == true)
            {
                saveResult(RuleName.praca_bez_kasku, "1", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, ii_ile_razy.Text, ResultType.Bool);
                ii_ile_razy.IsEnabled = true;
            }
            else
            {
                saveResult(RuleName.praca_bez_kasku, "0", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, ii_ile_razy.Text, ResultType.Bool);
                ii_ile_razy.IsEnabled = false;
            }
            iiCompetitionCountPoints();
        }

        private void ii_wejscie_na_miejsce_konkurencji_bez_wezwania_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, (bool)ii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void ii_nieprawidlowe_uruchomienie_pilarki_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nieprawidlowe_uruchomienie_pilarki, (bool)ii_nieprawidlowe_uruchomienie_pilarki.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void ii_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, (bool)ii_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void ii_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, (bool)ii_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }

        private void ii_obrazenia_nie_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, (bool)ii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void ii_obrazenia_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_wymagajace_pomocy_medycznej, (bool)ii_obrazenia_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }

        private void ii_zla_postawa_przy_okrzesywaniu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zla_postawa_przy_okrzesywaniu, (bool)ii_zla_postawa_przy_okrzesywaniu.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }

        private void ii_ile_razy_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, ii_ile_razy);
            iiCompetitionCountPoints();
        }

        private void ii_ile_razy_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.praca_bez_kasku_ile, ii_ile_razy.Text, ResultType.Bool);
            iiCompetitionCountPoints();
        }

        private void ii_dyskwalifikacja_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dyskwalifikacja, (bool)ii_dyskwalifikacja.IsChecked ? "1" : "0", ResultType.Bool);
            iiCompetitionCountPoints();
        }


        private void iiCompetitionChanged()
        {
            if (lv_competitors.SelectedItem == null)
            {
                return;
            }

            ii_punkty.Content = "";
            ii_czas_wykonania_zadania_2.Text = "";
            ii_seki_powyzej_5_mm.Text = "";
            ii_zranienia_klody_ponad_5_mm.Text = "";
            ii_pozostawienie_kola_w_strefie_okrzesywania.Text = "";
            ii_ile_razy.Text = "";
            ii_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked = false;
            ii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = false;
            ii_nieprawidlowe_uruchomienie_pilarki.IsChecked = false;
            ii_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = false;
            ii_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = false;
            ii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = false;
            ii_obrazenia_wymagajace_pomocy_medycznej.IsChecked = false;
            ii_zla_postawa_przy_okrzesywaniu.IsChecked = false;
            ii_dyskwalifikacja.IsChecked = false;


            int? round = Convert.ToInt32(lbRound.Content);
            Competitor competitor = lv_competitors.SelectedItem as Competitor;
            competitor.punkty = "0";
            competitor.czas = "0";
            List<Result_n> res_n = (from s in _resultNService.GetAll() where s.Competitorid == competitor.Id && round == s.round select s).ToList();


            foreach (Result_n r in res_n)
            {
                if(r.Rule.C_name == RuleName.czas_wykonania_zadania_2)
                {
                    ii_czas_wykonania_zadania_2.Text = r.value.ToString() ?? "0";
                    competitor.czas2 = ii_czas_wykonania_zadania_2.Text;
                }
                else if(r.Rule.C_name == RuleName.seki_powyzej_5_mm)
                {
                    ii_seki_powyzej_5_mm.Text = r.value.ToString() ?? "0";
                }
                else if(r.Rule.C_name == RuleName.zranienia_klody_ponad_5_mm)
                {
                    ii_zranienia_klody_ponad_5_mm.Text = r.value.ToString() ?? "0";
                }
                else if(r.Rule.C_name == RuleName.pozostawienie_kola_w_strefie_okrzesywania)
                {
                    ii_pozostawienie_kola_w_strefie_okrzesywania.Text = r.value.ToString() ?? "0";
                }
            }

            List<Result_b> res_b = (from s in _resultBService.GetAll() where s.Competitorid == competitor.Id && round == s.round && s.competition == currentTab select s).ToList();

            foreach (Result_b r in res_b)
            {
                if (r.Rule.C_name == RuleName.przechodzenie_z_lancuchem_w_ruchu && r.value == 1)
                {
                    ii_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania && r.value == 1)
                {
                    ii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.nieprawidlowe_uruchomienie_pilarki && r.value == 1)
                {
                    ii_nieprawidlowe_uruchomienie_pilarki.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut && r.value == 1)
                {
                    ii_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu && r.value == 1)
                {
                    ii_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_nie_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    ii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    ii_obrazenia_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.zla_postawa_przy_okrzesywaniu && r.value == 1)
                {
                    ii_zla_postawa_przy_okrzesywaniu.IsChecked = true;
                }
                else if(r.Rule.C_name==RuleName.dyskwalifikacja && r.value==1 )
                {
                    ii_dyskwalifikacja.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.praca_bez_kasku && r.value == 1)
                {
                    ii_praca_bez_kasku.IsChecked = true;
                    ii_ile_razy.IsEnabled = true;
                    ii_ile_razy.Text = (from s in _resultBService.GetAll() where s.Rule.C_name == RuleName.praca_bez_kasku_ile && s.Competitorid == competitor.Id && s.competition == currentTab select s).FirstOrDefault().value.ToString();
                }
            }

            iiCompetitionCountPoints();

        }

#endregion ii_competition


#region iii_competition

        private void iiiCompetitionCountPoints()
        {
            try
            {
                int? points = 0;
                ContestRuleEvaluator ruleEval = new ContestRuleEvaluator();

              if(  iii_pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla.IsChecked==true)
                {
                    if (!string.IsNullOrEmpty(iii_czas_wykonania_zadania_3.Text))
                    {
                        ruleEval.x_between_two_values_or_equal(iii_czas_wykonania_zadania_3.Text, RuleName.czas_wykonania_zadania_3a, ref points);
                    }

                }

              if (iii_pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla.IsChecked == true)
              {
                  if (!string.IsNullOrEmpty(iii_czas_wykonania_zadania_3.Text))
                  {
                      ruleEval.x_between_two_values_or_equal(iii_czas_wykonania_zadania_3.Text, RuleName.czas_wykonania_zadania_3b, ref points);

                  }

              }

              if (iii_pilarka_bez_nakretek.IsChecked == true)
              {
                  if (!string.IsNullOrEmpty(iii_czas_wykonania_zadania_3.Text))
                  {
                      ruleEval.x_between_two_values_or_equal(iii_czas_wykonania_zadania_3.Text, RuleName.czas_wykonania_zadania_3c, ref points);
                  }

              }


              if (iii_zrzucenie_zdejmowanego_lancucha_na_ziemie.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.zrzucenie_zdejmowanego_lancucha_na_ziemie, ref points);
                }

              if (iii_nie_obrocenie_prowadnicy_o_180_stopni.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.nie_obrocenie_prowadnicy_o_180_stopni, ref points);
              }

              if (iii_regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji_III, ref points);
              }
              if (iii_odwrotne_zalozenie_lancucha_tnacego.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.odwrotne_zalozenie_lancucha_tnacego, ref points);
              }
              if (iii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, ref points);
              }
              if (iii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, ref points);
              }
              if (iii_obrazenia_wymagajace_pomocy_medycznej.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.obrazenia_wymagajace_pomocy_medycznej, ref points);
              }
              if (iii_dyskwalifikacja.IsChecked == true)
              {
                  ruleEval.x_is_true(RuleName.dyskwalifikacja, ref points);
              }



                if (points < 0)
                {
                    points = 0;
                }

                iii_punkty.Content = points.ToString();
                Competitor c = lv_competitors.SelectedItem as Competitor;
                c.punkty3 = iii_punkty.Content.ToString();

          //      highlightTheBest();

            }
            catch (FormatException ex)
            {
                log.Error(ex.Message, ex);
                Competitor d = lv_competitors.SelectedItem as Competitor;
                d.punkty3 = "nieprawidłowe dane";
                iii_punkty.Content = "nieprawidłowe dane";
                MessageBox.Show("Nie można obliczyć ilości punktów ponieważ w którymś polu podane są nieprawidłowe dane.", "Nieprawidłowe dane", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }





        private void iii_czas_wykoniania_zadania_3_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iii_czas_wykonania_zadania_3);
        }
        private void iii_czas_wykonania_zadania_3_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.czas_wykonania_zadania_3, iii_czas_wykonania_zadania_3.Text, ResultType.Normal);
            Competitor d = lv_competitors.SelectedItem as Competitor;
            d.czas3 = iii_czas_wykonania_zadania_3.Text;
            iiiCompetitionCountPoints();
        }


        private void iii_zrzucenie_zdejmowanego_lancucha_na_ziemie_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.zrzucenie_zdejmowanego_lancucha_na_ziemie, (bool)iii_zrzucenie_zdejmowanego_lancucha_na_ziemie.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_nie_obrocenie_prowadnicy_o_180_stopni_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nie_obrocenie_prowadnicy_o_180_stopni, (bool)iii_nie_obrocenie_prowadnicy_o_180_stopni.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji_III, (bool)iii_regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_odwrotne_zalozenie_lancucha_tnacego_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.odwrotne_zalozenie_lancucha_tnacego, (bool)iii_odwrotne_zalozenie_lancucha_tnacego.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_wejscie_na_miejsce_konkurencji_bez_wezwania_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, (bool)iii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_obrazenia_nie_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, (bool)iii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_obrazenia_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_wymagajace_pomocy_medycznej, (bool)iii_obrazenia_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();
        }

        private void iii_dyskwalifikacja_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dyskwalifikacja, (bool)iii_dyskwalifikacja.IsChecked ? "1" : "0", ResultType.Bool);
            iiiCompetitionCountPoints();

        }

        private void iiiCompetitionChanged()
        {
            if (lv_competitors.SelectedItem == null)
            {
                return;
            }

            iii_punkty.Content = "";
            iii_czas_wykonania_zadania_3.Text = "";
            

            iii_zrzucenie_zdejmowanego_lancucha_na_ziemie.IsChecked = false;
            iii_nie_obrocenie_prowadnicy_o_180_stopni.IsChecked = false;
            iii_regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji.IsChecked = false;
            iii_odwrotne_zalozenie_lancucha_tnacego.IsChecked = false;
            iii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = false;
            iii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = false;
            iii_obrazenia_wymagajace_pomocy_medycznej.IsChecked = false;
            iii_pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla.IsChecked = true;
            iii_dyskwalifikacja.IsChecked = false;



            int? round = Convert.ToInt32(lbRound.Content);
            Competitor competitor = lv_competitors.SelectedItem as Competitor;
            competitor.punkty = "0";
            competitor.czas = "0";
            List<Result_n> res_nn = (from s in _resultNService.GetAll() where s.Competitorid == competitor.Id && round == s.round select s).ToList();


            foreach (Result_n r in res_nn)
            {
                if (r.Rule.C_name == RuleName.czas_wykonania_zadania_3)
                {
                    iii_czas_wykonania_zadania_3.Text = r.value.ToString() ?? "0";
                    competitor.czas3 = iii_czas_wykonania_zadania_3.Text;
                }
               
            }

            List<Result_b> res_bb = (from s in _resultBService.GetAll() where s.Competitorid == competitor.Id && round == s.round && s.competition == currentTab select s).ToList();

            foreach (Result_b r in res_bb)
            {
                if (r.Rule.C_name == RuleName.zrzucenie_zdejmowanego_lancucha_na_ziemie && r.value == 1)
                {
                    iii_zrzucenie_zdejmowanego_lancucha_na_ziemie.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.nie_obrocenie_prowadnicy_o_180_stopni && r.value == 1)
                {
                    iii_nie_obrocenie_prowadnicy_o_180_stopni.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji_III && r.value == 1)
                {
                    iii_regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.odwrotne_zalozenie_lancucha_tnacego && r.value == 1)
                {
                    iii_odwrotne_zalozenie_lancucha_tnacego.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania && r.value == 1)
                {
                    iii_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_nie_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    iii_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    iii_obrazenia_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla && r.value == 1)
                {
                    iii_pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_bez_nakretek && r.value == 1)
                {
                    iii_pilarka_bez_nakretek.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.dyskwalifikacja && r.value == 1)
                {
                    iii_dyskwalifikacja.IsChecked = true;
                }
               
            }

            iiiCompetitionCountPoints();

        }


        private void iii_pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla, "1" , ResultType.Bool);
            saveResult(RuleName.pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla, "0", ResultType.Bool);
            saveResult(RuleName.pilarka_bez_nakretek, "0", ResultType.Bool);


            iiiCompetitionChanged();
        }

        private void iii_pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla, "0", ResultType.Bool);
            saveResult(RuleName.pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla, "1", ResultType.Bool);
            saveResult(RuleName.pilarka_bez_nakretek, "0", ResultType.Bool);
        }

        private void iii_pilarka_bez_nakretek_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_z_dwoma_nakretkami_mocujacymi_pokrywe_sprzegla, "0", ResultType.Bool);
            saveResult(RuleName.pilarka_z_jedna_nakretka_mocujaca_pokrywe_sprzegla, "0", ResultType.Bool);
            saveResult(RuleName.pilarka_bez_nakretek, "1", ResultType.Bool);
            iiiCompetitionChanged();
        }

#endregion iii_competition

       
#region iv_competition

        private void ivCompetitionCountPoints()
        {

            try
            {
                int? points = 0;
                ContestRuleEvaluator ruleEval = new ContestRuleEvaluator();

                if (!string.IsNullOrEmpty(iv_czas_wykonania_zadania_4.Text))
                {
                    ruleEval.x_fourth_fifth_competition(iv_czas_wykonania_zadania_4.Text, RuleName.czas_wykonania_zadania_4, ref points);
                }

                if (!string.IsNullOrEmpty(iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4.Text) && (!string.IsNullOrEmpty(iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4.Text)))
                {
                    ruleEval.xs_equal_to_values(iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4.Text, iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4.Text,
                        RuleName.odchylenie_prostopadlosci_4, ref points);
                }

                if (!string.IsNullOrEmpty(iv_odchylenie_prostopadlosci_druga_kloda_st_4.Text) && (!string.IsNullOrEmpty(iv_odchylenie_prostopadlosci_druga_kloda_min_4.Text)))
                {
                    ruleEval.xs_equal_to_values(iv_odchylenie_prostopadlosci_druga_kloda_st_4.Text, iv_odchylenie_prostopadlosci_druga_kloda_min_4.Text,
                        RuleName.odchylenie_prostopadlosci_4, ref points);
                }

              


                if (!string.IsNullOrEmpty(iv_wielkosc_progu_pierwsza_kloda.Text))
                {
                    ruleEval.x_between_two_values_or_equal(iv_wielkosc_progu_pierwsza_kloda.Text, RuleName.wielkosc_progu_4, ref points);
                }
                if (!string.IsNullOrEmpty(iv_wielkosc_progu_druga_kloda.Text))
                {
                    ruleEval.x_between_two_values_or_equal(iv_wielkosc_progu_druga_kloda.Text, RuleName.wielkosc_progu_4, ref points);
                }

                
                Competitor cp = lv_competitors.SelectedItem as Competitor;
                Result_b r = (from s in _resultBService.GetAll() where s.Competitorid == cp.Id && s.Rule.C_name == RuleName.regulowanie_urzadzenia_tnacego_po_zakonczeniu_konkurencji_III select s).FirstOrDefault();

                if (r != null && r.value == 1)
                {
                    points += -50;
                }

                if (!string.IsNullOrEmpty(iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda.Text))
                {
                    ruleEval.x_multiply_by_points(iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda.Text,
                        RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda, ref points);
                }

                if (!string.IsNullOrEmpty(iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda.Text))
                {
                    ruleEval.x_multiply_by_points(iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda.Text,
                        RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda, ref points);
                }



                if (iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda, ref points);
                }

                if (iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda_4.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda, ref points);
                }



                if (iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda, ref points);
                }

                if (iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda_4.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda, ref points);
                }

                if (iv_rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda, ref points);
                }
                if (iv_rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda_4.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda, ref points);

                }

                if (iv_grubosc_odcietych_krazkow_pierwsza_kloda_4.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_4, ref points);
                }
                if (iv_grubosc_odcietych_krazkow_druga_kloda_4.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.grubosc_odcietych_krazkow_druga_kloda_4, ref points);
                }

                if (iv_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_4, ref points);

                }

                if (iv_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, ref points);
                }

                if (iv_praca_bez_kasku.IsChecked == true && !string.IsNullOrEmpty(iv_ile_razy.Text))
                {
                    ruleEval.x_is_true_multiplied(RuleName.praca_bez_kasku, iv_ile_razy.Text, ref points);


                }
                if (iv_nieprawidlowe_uruchomienie_pilarki.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.nieprawidlowe_uruchomienie_pilarki, ref points);
                }
                if (iv_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, ref points);
                }
                if (iv_przechodzenie_z_lancychem_tnacym_w_ruchu.IsChecked == true)
                {
                   ruleEval.x_is_true(RuleName.przechodzenie_z_lancuchem_w_ruchu,ref points);
                }
                if (iv_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, ref points);
                }
                if (iv_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, ref points);
                }
                if (iv_obrazenia_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_wymagajace_pomocy_medycznej, ref points);
                }

                if (iv_dyskwalifikacja.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dyskwalifikacja, ref points);
                }


                if (points < 0)
                {
                    points = 0;
                }

                iv_punkty.Content = points.ToString();
                Competitor c = lv_competitors.SelectedItem as Competitor;
                c.punkty4 = iv_punkty.Content.ToString();

         //       highlightTheBest();


            }
            catch (FormatException ex)
            {
                log.Error(ex.Message, ex);
                Competitor d = lv_competitors.SelectedItem as Competitor;
                d.punkty4 = "nieprawidłowe dane";
                iv_punkty.Content = "nieprawidłowe dane";
                MessageBox.Show("Nie można obliczyć ilości punktów ponieważ w którymś polu podane są nieprawidłowe dane.", "Nieprawidłowe dane", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void iv_czas_wykonania_zadania_4_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_czas_wykonania_zadania_4);
        }

        private void iv_czas_wykonania_zadania_4_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.czas_wykonania_zadania_4, iv_czas_wykonania_zadania_4.Text, ResultType.Normal);
            Competitor d = lv_competitors.SelectedItem as Competitor;
            d.czas4 = iv_czas_wykonania_zadania_4.Text;
            ivCompetitionCountPoints();
        }

        private void iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4);
        }

        private void iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_pierwsza_kloda_st_4, iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4);
        }

        private void iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_pierwsza_kloda_min_4, iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_odchylenie_prostopadlosci_druga_kloda_st_4_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_odchylenie_prostopadlosci_druga_kloda_st_4);
        }

        private void iv_odchylenie_prostopadlosci_druga_kloda_st_4_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_druga_kloda_st_4, iv_odchylenie_prostopadlosci_druga_kloda_st_4.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_odchylenie_prostopadlosci_druga_kloda_min_4_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_odchylenie_prostopadlosci_druga_kloda_min_4);
        }

        private void iv_odchylenie_prostopadlosci_druga_kloda_min_4_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_druga_kloda_min_4, iv_odchylenie_prostopadlosci_druga_kloda_min_4.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_wielkosc_progu_pierwsza_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_wielkosc_progu_pierwsza_kloda);
        }

        private void iv_wielkosc_progu_pierwsza_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.wielkosc_progu_pierwsza_kloda, iv_wielkosc_progu_pierwsza_kloda.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_wielkosc_progu_druga_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_wielkosc_progu_druga_kloda);
        }

        private void iv_wielkosc_progu_druga_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.wielkosc_progu_druga_kloda, iv_wielkosc_progu_druga_kloda.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda);
        }

        private void iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda, iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda);
        }

        private void iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda, iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_ile_razy_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, iv_ile_razy);
        }

        private void iv_ile_razy_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.praca_bez_kasku, iv_ile_razy.Text, ResultType.Normal);
            ivCompetitionCountPoints();
        }

        private void iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda, (bool)iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda_4_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda, (bool)iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda_4.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda, (bool)iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda_4_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda, (bool)iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda_4.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda, (bool)iv_rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda_4_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda, (bool)iv_rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda_4.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_grubosc_odcietych_krazkow_pierwsza_kloda_4_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_4, (bool)iv_grubosc_odcietych_krazkow_pierwsza_kloda_4.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_grubosc_odcietych_krazkow_druga_kloda_1_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.grubosc_odcietych_krazkow_druga_kloda_4, (bool)iv_grubosc_odcietych_krazkow_druga_kloda_4.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_4, (bool)iv_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_wejscie_na_miejsce_konkurencji_bez_wezwania_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, (bool)iv_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_praca_bez_kasku_Click(object sender, RoutedEventArgs e)
        {
            if (iv_praca_bez_kasku.IsChecked == true)
            {
                saveResult(RuleName.praca_bez_kasku, "1", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, iv_ile_razy.Text, ResultType.Bool);
                iv_ile_razy.IsEnabled = true;
            }
            else
            {
                saveResult(RuleName.praca_bez_kasku, "0", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, iv_ile_razy.Text, ResultType.Bool);
                iv_ile_razy.IsEnabled = false;
            }
            ivCompetitionCountPoints();
        }

        private void iv_nieprawidlowe_uruchomienie_pilarki_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nieprawidlowe_uruchomienie_pilarki, (bool)iv_nieprawidlowe_uruchomienie_pilarki.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, (bool)iv_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_przechodzenie_z_lancychem_tnacym_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przechodzenie_z_lancuchem_w_ruchu, (bool)iv_przechodzenie_z_lancychem_tnacym_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, (bool)iv_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_obrazenia_nie_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, (bool)iv_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_obrazenia_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_wymagajace_pomocy_medycznej, (bool)iv_obrazenia_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }

        private void iv_dyskwalifikacja_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dyskwalifikacja, (bool)iv_dyskwalifikacja.IsChecked ? "1" : "0", ResultType.Bool);
            ivCompetitionCountPoints();
        }


        private void ivCompetitionChanged()
        {
            if (lv_competitors.SelectedItem == null)
            {
                return;
            }

            iv_czas_wykonania_zadania_4.Text = "";
            iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4.Text = "";
            iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4.Text = "";
            iv_odchylenie_prostopadlosci_druga_kloda_st_4.Text = "";
            iv_odchylenie_prostopadlosci_druga_kloda_min_4.Text = "";
            iv_wielkosc_progu_pierwsza_kloda.Text = "";
            iv_wielkosc_progu_druga_kloda.Text = "";
            iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda.Text = "";
            iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda.Text = "";
            iv_punkty.Content = "";
            iv_ile_razy.Text = "";
            iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda.IsChecked = false;
            iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda_4.IsChecked = false;
            iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda.IsChecked = false;
            iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda_4.IsChecked = false;
            iv_rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda.IsChecked = false;
            iv_rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda_4.IsChecked = false;
            iv_grubosc_odcietych_krazkow_pierwsza_kloda_4.IsChecked = false;
            iv_grubosc_odcietych_krazkow_druga_kloda_4.IsChecked = false;
            iv_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked = false;
            iv_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = false;
            iv_nieprawidlowe_uruchomienie_pilarki.IsChecked = false;
            iv_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = false;
            iv_przechodzenie_z_lancychem_tnacym_w_ruchu.IsChecked = false;
            iv_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = false;
            iv_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = false;
            iv_obrazenia_wymagajace_pomocy_medycznej.IsChecked = false;
            iv_ile_razy.IsEnabled = false;
            iv_praca_bez_kasku.IsChecked = false;
            iv_dyskwalifikacja.IsChecked = false;

            int? round = Convert.ToInt32(lbRound.Content);
            Competitor competitor = lv_competitors.SelectedItem as Competitor;
            competitor.punkty = "0";
            competitor.czas = "0";

            List<Result_n> resultsN = (from s in _resultNService.GetAll() where s.Competitorid == competitor.Id && round == s.round select s).ToList();
            foreach (Result_n r in resultsN)
            {
                if (r.Rule.C_name == RuleName.czas_wykonania_zadania_4)
                {
                    iv_czas_wykonania_zadania_4.Text = r.value.ToString() ?? "0";
                    competitor.czas4 = iv_czas_wykonania_zadania_4.Text;
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_pierwsza_kloda_st_4)
                {
                    iv_odchylenie_prostopadlosci_pierwsza_kloda_st_4.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_pierwsza_kloda_min_4)
                {
                    iv_odchylenie_prostopadlosci_pierwsza_kloda_min_4.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_druga_kloda_st_4)
                {
                    iv_odchylenie_prostopadlosci_druga_kloda_st_4.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_druga_kloda_min_4)
                {
                    iv_odchylenie_prostopadlosci_druga_kloda_min_4.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.wielkosc_progu_pierwsza_kloda)
                {
                    iv_wielkosc_progu_pierwsza_kloda.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.wielkosc_progu_druga_kloda)
                {
                    iv_wielkosc_progu_druga_kloda.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda)
                {
                    iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_pierwsza_kloda.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda)
                {
                    iv_ciecie_dolne_nie_dochodzi_do_dolnej_granicy_pasa_druga_kloda.Text = r.value.ToString() ?? "0";
                }
            }


            List<Result_b> resultsB = (from s in _resultBService.GetAll() where s.Competitorid == competitor.Id && round == s.round && s.competition == currentTab select s).ToList();

            foreach (Result_b r in resultsB)
            {
                if (r.Rule.C_name == RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda && r.value == 1)
                {
                    iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_pierwsza_kloda.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda && r.value == 1)
                {
                    iv_przeciecie_lini_srodkowej_przy_cieciu_z_dolu_druga_kloda_4.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda && r.value == 1)
                {
                    iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_pierwsza_kloda.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda && r.value == 1)
                {
                    iv_przeciecie_lini_srodkowej_przy_cieciu_z_gory_druga_kloda_4.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda && r.value == 1)
                {
                    iv_rozpoczecie_ciecia_gornego_poza_strefa_pierwsza_kloda.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda && r.value == 1)
                {
                    iv_rozpoczecie_ciecia_gornego_poza_strefa_druga_kloda_4.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_4 && r.value == 1)
                {
                    iv_grubosc_odcietych_krazkow_pierwsza_kloda_4.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.grubosc_odcietych_krazkow_druga_kloda_4 && r.value == 1)
                {
                    iv_grubosc_odcietych_krazkow_druga_kloda_4.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_4 && r.value == 1)
                {
                    iv_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania && r.value == 1)
                {
                    iv_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.nieprawidlowe_uruchomienie_pilarki && r.value == 1)
                {
                    iv_nieprawidlowe_uruchomienie_pilarki.IsChecked = true;
                }


                else if (r.Rule.C_name == RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu && r.value == 1)
                {
                    iv_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przechodzenie_z_lancuchem_w_ruchu && r.value == 1)
                {
                    iv_przechodzenie_z_lancychem_tnacym_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut && r.value == 1)
                {
                    iv_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.obrazenia_nie_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    iv_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    iv_obrazenia_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if(r.Rule.C_name==RuleName.dyskwalifikacja && r.value==1)
                {
                    iv_dyskwalifikacja.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.praca_bez_kasku && r.value == 1)
                {
                    iv_praca_bez_kasku.IsChecked = true;
                    iv_ile_razy.IsEnabled = true;
                    iv_ile_razy.Text = (from s in _resultNService.GetAll() where s.Rule.C_name == RuleName.praca_bez_kasku_ile && s.Competitorid == competitor.Id && s.round == round select s).FirstOrDefault().value.ToString();
                }
            }

         ivCompetitionCountPoints();
        }




        #endregion iv_competition

        
#region v_competition

        private void vCompetitionCountPoints()
        {

            try
            {
                int? points = 0;
                int? tempVal1 = 0;
                int? tempVal2 = 0;
                int? krag1 = 0;
                int? krag2 = 0;
                ContestRuleEvaluator ruleEval = new ContestRuleEvaluator();


                if (!string.IsNullOrEmpty(v_czas_wykonania_zadania_5.Text))
                {
                    ruleEval.x_fourth_fifth_competition(v_czas_wykonania_zadania_5.Text, RuleName.czas_wykonania_zadania_5, ref points);

                }

                if (!string.IsNullOrEmpty(v_odchylenie_prostopadlosci_pierwsza_kloda_st_5.Text) && (!string.IsNullOrEmpty(v_odchylenie_prostopadlosci_pierwsza_kloda_min_5.Text)))
                {
                    ruleEval.xs_equal_to_values(v_odchylenie_prostopadlosci_pierwsza_kloda_st_5.Text, v_odchylenie_prostopadlosci_pierwsza_kloda_min_5.Text,
                        RuleName.odchylenie_prostopadlosci_5, ref points);
                }

                if (!string.IsNullOrEmpty(v_odchylenie_prostopadlosci_druga_kloda_st_5.Text) && (!string.IsNullOrEmpty(v_odchylenie_prostopadlosci_druga_kloda_min_5.Text)))
                {
                    ruleEval.xs_equal_to_values(v_odchylenie_prostopadlosci_druga_kloda_st_5.Text, v_odchylenie_prostopadlosci_druga_kloda_min_5.Text,
                    RuleName.odchylenie_prostopadlosci_5, ref points);
                }

                if (!string.IsNullOrEmpty(v_niedopil_pierwsza_kloda.Text))
                {
                    tempVal1 = ruleEval.xs_equal_to_values(v_niedopil_pierwsza_kloda.Text, v_niedopil_pierwsza_kloda.Text, RuleName.niedopil_5, ref points);
                }

                if (!string.IsNullOrEmpty(v_niedopil_druga_kloda.Text))
                {
                    tempVal2 = ruleEval.xs_equal_to_values(v_niedopil_druga_kloda.Text, v_niedopil_druga_kloda.Text, RuleName.niedopil_5, ref points);
                }
            
                if (v_grubosc_odcietych_krazkow_pierwsza_kloda_5.IsChecked == true)
                {
                    krag1 = ruleEval.x_is_true(RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_5, ref points);
                }
                if (v_grubosc_odcietych_krazkow_druga_kloda_5.IsChecked == true)
                {
                    krag2 = ruleEval.x_is_true(RuleName.grubosc_odcietych_krazkow_druga_kloda_5, ref points);
                }
                if (v_odsuniecie_trocin.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.odsuniecie_trocin, ref points);
                }
                if (v_przechodzenie_przez_klode.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przechodzenie_przez_klode, ref points);
                }
                if (v_praca_bez_kasku.IsChecked == true && !string.IsNullOrEmpty(v_ile_razy.Text))
                {
                    ruleEval.x_is_true_multiplied(RuleName.praca_bez_kasku, v_ile_razy.Text, ref points);
                }
                if (v_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_5, ref points);
                }
                if (v_skaleczenie_deski.IsChecked == true)
                {
                    points -= tempVal1 + tempVal2 + krag1 + krag2;
                }
                if (v_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, ref points);
                }
                if (v_nieprawidlowe_uruchomienie_pilarki.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.nieprawidlowe_uruchomienie_pilarki, ref points);
                }
                if (v_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, ref points);
                }
                if (v_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.przechodzenie_z_lancuchem_w_ruchu, ref points);
                }

                if (v_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, ref points);
                }
                if (v_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, ref points);
                }
                if (v_obrazenia_wymagajace_pomocy_medycznej.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.obrazenia_wymagajace_pomocy_medycznej, ref points);
                }
                if (v_dyskwalifikacja.IsChecked == true)
                {
                    ruleEval.x_is_true(RuleName.dyskwalifikacja, ref points);
                }

                if (points < 0)
                {
                    points = 0;
                }

                v_punkty.Content = points.ToString();
                Competitor c = lv_competitors.SelectedItem as Competitor;
                c.punkty5 = v_punkty.Content.ToString();

          //      highlightTheBest();

            }


            catch (FormatException ex)
            {
                log.Error(ex.Message, ex);
                Competitor d = lv_competitors.SelectedItem as Competitor;
                d.punkty5 = "nieprawidłowe dane";
                v_punkty.Content = "nieprawidłowe dane";
                MessageBox.Show("Nie można obliczyć ilości punktów ponieważ w którymś polu podane są nieprawidłowe dane.", "Nieprawidłowe dane", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void v_czas_wykonania_zadania_5_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_czas_wykonania_zadania_5);
        }

        private void v_czas_wykonania_zadania_5_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.czas_wykonania_zadania_5, v_czas_wykonania_zadania_5.Text, ResultType.Normal);
            Competitor d = lv_competitors.SelectedItem as Competitor;
            d.czas5 = v_czas_wykonania_zadania_5.Text;
            vCompetitionCountPoints();
        }

        private void v_odchylenie_prostopadlosci_pierwsza_kloda_st_5_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_odchylenie_prostopadlosci_pierwsza_kloda_st_5);
        }

        private void v_odchylenie_prostopadlosci_pierwsza_kloda_st_5_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_pierwsza_kloda_st_5, v_odchylenie_prostopadlosci_pierwsza_kloda_st_5.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }

        private void v_odchylenie_prostopadlosci_pierwsza_kloda_min_5_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_odchylenie_prostopadlosci_pierwsza_kloda_min_5);
        }

        private void v_odchylenie_prostopadlosci_pierwsza_kloda_min_5_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_pierwsza_kloda_min_5, v_odchylenie_prostopadlosci_pierwsza_kloda_min_5.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }

        private void v_odchylenie_prostopadlosci_druga_kloda_st_5_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_odchylenie_prostopadlosci_druga_kloda_st_5);
        }

        private void v_odchylenie_prostopadlosci_druga_kloda_st_5_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_druga_kloda_st_5, v_odchylenie_prostopadlosci_druga_kloda_st_5.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }

        private void v_odchylenie_prostopadlosci_druga_kloda_min_5_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_odchylenie_prostopadlosci_druga_kloda_min_5);
        }

        private void v_odchylenie_prostopadlosci_druga_kloda_min_5_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.odchylenie_prostopadlosci_druga_kloda_min_5, v_odchylenie_prostopadlosci_druga_kloda_min_5.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }

        private void v_niedopil_pierwsza_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_niedopil_pierwsza_kloda);
        }

        private void v_niedopil_pierwsza_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.niedopil_pierwsza_kloda, v_niedopil_pierwsza_kloda.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }

        private void v_niedopil_druga_kloda_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_niedopil_druga_kloda);
        }

        private void v_niedopil_druga_kloda_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.niedopil_druga_kloda, v_niedopil_druga_kloda.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }
        private void v_ile_razy_KeyDown(object sender, KeyEventArgs e)
        {
            Validation.OnlyNumbersAndCommas(e, v_ile_razy);
        }

        private void v_ile_razy_KeyUp(object sender, KeyEventArgs e)
        {
            saveResult(RuleName.praca_bez_kasku_ile, v_ile_razy.Text, ResultType.Normal);
            vCompetitionCountPoints();
        }


        private void v_grubosc_odcietych_krazkow_pierwsza_kloda_5_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_5, (bool)v_grubosc_odcietych_krazkow_pierwsza_kloda_5.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_grubosc_odcietych_krazkow_druga_kloda_5_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.grubosc_odcietych_krazkow_druga_kloda_5, (bool)v_grubosc_odcietych_krazkow_druga_kloda_5.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_odsuniecie_trocin_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.odsuniecie_trocin, (bool)v_odsuniecie_trocin.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_przechodzenie_przez_klode_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przechodzenie_przez_klode, (bool)v_przechodzenie_przez_klode.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_5, (bool)v_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_skaleczenie_deski_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.skaleczenie_deski, (bool)v_skaleczenie_deski.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_wejscie_na_miejsce_konkurencji_bez_wezwania_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania, (bool)v_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_praca_bez_kasku_Click(object sender, RoutedEventArgs e)
        {
            if (v_praca_bez_kasku.IsChecked == true)
            {
                saveResult(RuleName.praca_bez_kasku, "1", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, v_ile_razy.Text, ResultType.Bool);
                v_ile_razy.IsEnabled = true;
            }
            else
            {
                saveResult(RuleName.praca_bez_kasku, "0", ResultType.Bool);
                saveResult(RuleName.praca_bez_kasku_ile, v_ile_razy.Text, ResultType.Bool);
                v_ile_razy.IsEnabled = false;
            }
            vCompetitionCountPoints();
        }

        private void v_nieprawidlowe_uruchomienie_pilarki_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.nieprawidlowe_uruchomienie_pilarki, (bool)v_nieprawidlowe_uruchomienie_pilarki.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu, (bool)v_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_przechodzenie_z_lancuchem_tnacym_w_ruchu_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.przechodzenie_z_lancuchem_w_ruchu, (bool)v_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut, (bool)v_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_obrazenia_nie_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_nie_wymagajace_pomocy_medycznej, (bool)v_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_obrazenia_wymagajace_pomocy_medycznej_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.obrazenia_wymagajace_pomocy_medycznej, (bool)v_obrazenia_wymagajace_pomocy_medycznej.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

        private void v_dyskwalifikacja_Click(object sender, RoutedEventArgs e)
        {
            saveResult(RuleName.dyskwalifikacja, (bool)v_dyskwalifikacja.IsChecked ? "1" : "0", ResultType.Bool);
            vCompetitionCountPoints();
        }

     




        private void vCompetitionChanged()
        {
            if (lv_competitors.SelectedItem == null)
            {
                return;
            }

            v_czas_wykonania_zadania_5.Text = "";
            v_odchylenie_prostopadlosci_pierwsza_kloda_st_5.Text = "";
            v_odchylenie_prostopadlosci_pierwsza_kloda_min_5.Text = "";
            v_odchylenie_prostopadlosci_druga_kloda_st_5.Text = "";
            v_odchylenie_prostopadlosci_druga_kloda_min_5.Text = "";
            v_niedopil_pierwsza_kloda.Text = "";
            v_niedopil_druga_kloda.Text = "";
            v_punkty.Content = "";
            v_ile_razy.Text = "";
            v_grubosc_odcietych_krazkow_pierwsza_kloda_5.IsChecked = false;
            v_grubosc_odcietych_krazkow_druga_kloda_5.IsChecked = false;
            v_odsuniecie_trocin.IsChecked = false;
            v_przechodzenie_przez_klode.IsChecked = false;
            v_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked = false;
            v_skaleczenie_deski.IsChecked = false;
            v_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = false;
            v_nieprawidlowe_uruchomienie_pilarki.IsChecked = false;
            v_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = false;
            v_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked = false;
            v_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = false;
            v_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = false;
            v_obrazenia_wymagajace_pomocy_medycznej.IsChecked = false;
            v_ile_razy.IsEnabled = false;
            v_praca_bez_kasku.IsChecked = false;
            v_dyskwalifikacja.IsChecked = false;

            int? round = Convert.ToInt32(lbRound.Content);
            Competitor competitor = lv_competitors.SelectedItem as Competitor;
            competitor.punkty = "0";
            competitor.czas = "0";

            List<Result_n> resultsN = (from s in _resultNService.GetAll() where s.Competitorid == competitor.Id && round == s.round select s).ToList();
            foreach (Result_n r in resultsN)
            {
                if (r.Rule.C_name == RuleName.czas_wykonania_zadania_5)
                {
                    v_czas_wykonania_zadania_5.Text = r.value.ToString() ?? "0";
                    competitor.czas5 = v_czas_wykonania_zadania_5.Text;
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_pierwsza_kloda_st_5)
                {
                    v_odchylenie_prostopadlosci_pierwsza_kloda_st_5.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_pierwsza_kloda_min_5)
                {
                    v_odchylenie_prostopadlosci_pierwsza_kloda_min_5.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_druga_kloda_st_5)
                {
                    v_odchylenie_prostopadlosci_druga_kloda_st_5.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.odchylenie_prostopadlosci_druga_kloda_min_5)
                {
                    v_odchylenie_prostopadlosci_druga_kloda_min_5.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.niedopil_pierwsza_kloda)
                {
                    v_niedopil_pierwsza_kloda.Text = r.value.ToString() ?? "0";
                }
                else if (r.Rule.C_name == RuleName.niedopil_druga_kloda)
                {
                    v_niedopil_druga_kloda.Text = r.value.ToString() ?? "0";
                }
            }


            List<Result_b> resultsB = (from s in _resultBService.GetAll() where s.Competitorid == competitor.Id && round == s.round && s.competition == currentTab select s).ToList();

            foreach (Result_b r in resultsB)
            {
                if (r.Rule.C_name == RuleName.grubosc_odcietych_krazkow_pierwsza_kloda_5 && r.value == 1)
                {
                    v_grubosc_odcietych_krazkow_pierwsza_kloda_5.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.grubosc_odcietych_krazkow_druga_kloda_5 && r.value == 1)
                {
                    v_grubosc_odcietych_krazkow_druga_kloda_5.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.odsuniecie_trocin && r.value == 1)
                {
                    v_odsuniecie_trocin.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przechodzenie_przez_klode && r.value == 1)
                {
                    v_przechodzenie_przez_klode.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie_5 && r.value == 1)
                {
                    v_spadniecie_lancuhca_lub_zakleszczenie_prowadnicy_w_rzazie.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.skaleczenie_deski && r.value == 1)
                {
                    v_skaleczenie_deski.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.wejscie_na_miejsce_konkurencji_bez_wezwania && r.value == 1)
                {
                    v_wejscie_na_miejsce_konkurencji_bez_wezwania.IsChecked = true;
                }


                else if (r.Rule.C_name == RuleName.nieprawidlowe_uruchomienie_pilarki && r.value == 1)
                {
                    v_nieprawidlowe_uruchomienie_pilarki.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.dotkniecie_lancucha_gdy_silnik_jest_w_ruchu && r.value == 1)
                {
                    v_dotkniecie_lancucha_gdy_silnik_jest_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.przechodzenie_z_lancuchem_w_ruchu && r.value == 1)
                {
                    v_przechodzenie_z_lancuchem_tnacym_w_ruchu.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut && r.value == 1)
                {
                    v_pilarka_nie_udaje_sie_uruchomic_w_ciagu_5_minut.IsChecked = true;
                }


                else if (r.Rule.C_name == RuleName.obrazenia_nie_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    v_obrazenia_nie_wymagajace_pomocy_medycznej.IsChecked = true;
                }
                else if (r.Rule.C_name == RuleName.obrazenia_wymagajace_pomocy_medycznej && r.value == 1)
                {
                    v_obrazenia_wymagajace_pomocy_medycznej.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.dyskwalifikacja && r.value == 1)
                {
                   v_dyskwalifikacja.IsChecked = true;
                }

                else if (r.Rule.C_name == RuleName.praca_bez_kasku && r.value == 1)
                {
                    v_praca_bez_kasku.IsChecked = true;
                    v_ile_razy.IsEnabled = true;
                    v_ile_razy.Text = (from s in _resultNService.GetAll() where s.Rule.C_name == RuleName.praca_bez_kasku_ile && s.Competitorid == competitor.Id && s.round == round select s).FirstOrDefault().value.ToString();
                }
            }

            vCompetitionCountPoints();
        }


#endregion v_competition



        private void bNextRound_Click(object sender, RoutedEventArgs e)
        {
            int tmpRound = int.Parse(lbRound.Content.ToString());
            tmpRound++;

            if (tiCompetition1.IsSelected)
            {
                if (tmpRound > contest.competition_1)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmpRound;                    
                }
            }
            else if (tiCompetition2.IsSelected)
            {
                if (tmpRound > contest.competition_2)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmpRound;
                }
            }
            else if (tiCompetition3.IsSelected)
            {
                if (tmpRound > contest.competition_3)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmpRound;
                }
            }
            else if (tiCompetition4.IsSelected)
            {
                if (tmpRound > contest.competition_4)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmpRound;
                }
            }
            else if (tiCompetition5.IsSelected)
            {
                if (tmpRound > contest.competition_5)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmpRound;
                }
            }
            currentRound = tmpRound;
            reloadCompetition();

        }

        private void bPreviousRound_Click(object sender, RoutedEventArgs e)
        {
            int tmp = int.Parse(lbRound.Content.ToString());
            tmp--;

            if (tiCompetition1.IsSelected)
            {
                if (tmp < 1 && contest.competition_1 != 0)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmp;
                }
            }
            else if (tiCompetition2.IsSelected)
            {
                if (tmp < 1 && contest.competition_2 != 0)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmp;
                }
            }
            else if (tiCompetition3.IsSelected)
            {
                if (tmp < 1 && contest.competition_3 != 0)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmp;
                }
            }
            else if (tiCompetition4.IsSelected)
            {
                if (tmp < 1 && contest.competition_4 != 0)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmp;
                }
            }
            else if (tiCompetition5.IsSelected)
            {
                if (tmp < 1 && contest.competition_5 != 0)
                {
                    return;
                }
                else
                {
                    lbRound.Content = tmp;
                }
            }

            reloadCompetition();
        }

        private void reloadCurrentCompetitor()
        {
            if(tiCompetition1.IsSelected == true)
            {
                iCompetitionChanged();
            }
            else if(tiCompetition2.IsSelected == true)
            {
                iiCompetitionChanged();
            }
            else if(tiCompetition3.IsSelected == true)
            {
                iiiCompetitionChanged();
            }
            else if(tiCompetition4.IsSelected == true)
            {
                 ivCompetitionChanged();
            }
            else if(tiCompetition5.IsSelected == true)
            {
                 vCompetitionChanged();
            }
        }

        private void reloadCompetition()
        {
            if (lv_competitors.Items.Count <= 0)
            {
                return;
            }

            if (tiCompetition1.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iCompetitionChanged();

                }
            }
            else if (tiCompetition2.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iiCompetitionChanged();

                }
            }
            else if (tiCompetition3.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iiiCompetitionChanged();

                }
            }
            else if (tiCompetition4.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    ivCompetitionChanged();

                }
            }
            else if (tiCompetition5.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    vCompetitionChanged();
                }
            }
            lv_competitors.SelectedIndex = 0;

        }

        private void reloadAllContest(bool onlyThis = true)
        {
            if(lv_competitors.Items.Count <= 0)
            {
                return;
            }
            if (tiCompetition1.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iiCompetitionChanged();
                    iiiCompetitionChanged();
                    ivCompetitionChanged();
                    vCompetitionChanged();
                    iCompetitionChanged();
                }
            }
            else if (tiCompetition2.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iCompetitionChanged();
                    iiiCompetitionChanged();
                    ivCompetitionChanged();
                    vCompetitionChanged();
                    iiCompetitionChanged();
                }
            }
            else if (tiCompetition3.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iCompetitionChanged();
                    iiCompetitionChanged();
                    ivCompetitionChanged();
                    vCompetitionChanged();
                    iiiCompetitionChanged();
                }
            }
            else if (tiCompetition4.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iCompetitionChanged();
                    iiCompetitionChanged();
                    iiiCompetitionChanged();
                    vCompetitionChanged();
                    ivCompetitionChanged();
                }
            }
            else if (tiCompetition5.IsSelected == true)
            {
                for (int i = 0; i < lv_competitors.Items.Count; i++)
                {
                    lv_competitors.SelectedIndex = i;
                    iCompetitionChanged();
                    iiCompetitionChanged();
                    iiiCompetitionChanged();
                    ivCompetitionChanged();
                    vCompetitionChanged();
                }
            }
            lv_competitors.SelectedIndex = 0;
        }

        private void tcMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            lbRound.Content = "1";
            currentRound = 1;
            if (tiCompetition1.IsSelected == true)
            {
                currentTab = 1;
                foreach (var s in competitors)
                {
                    s.punkty = s.punkty1;
                    s.czas = s.czas1;
                }
            }
            else if (tiCompetition2.IsSelected == true)
            {
                currentTab = 2;
                foreach (var s in competitors)
                {
                    s.punkty = s.punkty2;
                    s.czas = s.czas2;
                }
            }
            else if (tiCompetition3.IsSelected == true)
            {
                currentTab = 3;
                foreach (var s in competitors)
                {
                    s.punkty = s.punkty3;
                    s.czas = s.czas3;
                }
            }
            else if (tiCompetition4.IsSelected == true)
            {
                currentTab = 4;
                foreach (var s in competitors)
                {
                    s.punkty = s.punkty4;
                    s.czas = s.czas4;
                }
            }
            else if (tiCompetition5.IsSelected == true)
            {
                currentTab = 5;
                foreach (var s in competitors)
                {
                    s.punkty = s.punkty5;
                    s.czas = s.czas5;
                }
            }
        }

        private void bResults_Click(object sender, RoutedEventArgs e)
        {
            if (bResults.Content.ToString() == "Wyniki")
            {
                foreach (var item in lv_competitors.Items)
                {
                    Competitor c = item as Competitor;
                    c.punkty = c.suma.ToString();
                }
                tcMain.Visibility = System.Windows.Visibility.Hidden;
                bResults.Content = "Konkurs";
                competitors.SortDescending(x => x.suma);
            }
            else
            {
                tcMain.Visibility = System.Windows.Visibility.Visible;
                bResults.Content = "Wyniki";
                competitors.SortAscending(x => x.number);

                reloadCompetition();
            }
             
        }

      
        private void highlightTheBest()
        {
            if (lv_competitors.Items.Count <= 1)
            {
                return;
            }
            int max = 0;
            int index = 0;
            for (int i = 0; i < lv_competitors.Items.Count; i++)
            {
                var tmp = (lv_competitors.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem);
                if(tmp == null)
                {
                    continue;
                }
                tmp.Background = System.Windows.Media.Brushes.White;
                if (max < int.Parse((lv_competitors.Items[i] as Competitor).punkty))
                {
                    max = int.Parse((lv_competitors.Items[i] as Competitor).punkty);
                    index = i;
                }
            }

          //  (lv_competitors.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem).Background = System.Windows.Media.Brushes.LightSkyBlue;

        }


        private void bPrintResults_Click(object sender, RoutedEventArgs e)
        {
            if (competitors.Count < 0)
            {
                return;
            }

            string fileName = string.Format("{0}\\DataSource.csv", Environment.CurrentDirectory);

            // if file exists then delete
            if (File.Exists(fileName))
                File.Delete(fileName);

            Word.Application wordApplication = new Word.Application();
            wordApplication.DisplayAlerts = WdAlertLevel.wdAlertsNone;

            // add a new document
            Word.Document newDocument = wordApplication.Documents.Add();
            Word.Table table;
            if(bResults.Content.ToString() == "Wyniki")
            { 
                table = newDocument.Tables.Add(wordApplication.Selection.Range, competitors.Count + 1, 3);
            }
            else
            {
                table = newDocument.Tables.Add(wordApplication.Selection.Range, competitors.Count + 1, 2);

            }
            table.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
            table.Borders.InsideLineWidth = WdLineWidth.wdLineWidth050pt;
            table.Borders.InsideColor = WdColor.wdColorAutomatic;
            table.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;
            table.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;
            table.Borders.OutsideColor = WdColor.wdColorAutomatic;

            var tb = competitors;
            tb.SortDescending(s => s.punkty);

            table.Cell(1, 1).Select();
            wordApplication.Selection.TypeText(string.Format("Imie i nazwisko"));
            table.Cell(1, 2).Select();
            wordApplication.Selection.TypeText(string.Format("punkty"));
            if(bResults.Content.ToString() == "Wyniki")
            { 
                table.Cell(1, 3).Select();
                wordApplication.Selection.TypeText(string.Format("czas"));
            }


            for (int i = 1; i <= tb.Count; i++)
            {
                tb[i - 1].punkty = tb[i - 1].punkty.ToString();
                
                table.Cell(i+1, 1).Select();
                wordApplication.Selection.TypeText(string.Format("{0} - {1} {2}",tb[i-1].number, tb[i - 1].C_name, tb[i - 1].surname));

                table.Cell(i+1, 2).Select();
                wordApplication.Selection.TypeText(tb[i-1].punkty);

                if (bResults.Content.ToString() == "Wyniki")
                {
                    table.Cell(i + 1, 3).Select();
                    wordApplication.Selection.TypeText(tb[i - 1].czas);
                }
            }


            if (bResults.Content.ToString() == "Konkurs")
            {
                string documentFile = string.Format("{0}\\Klasyfikacja ogolna{1}", Environment.CurrentDirectory, ".doc", currentTab);
                newDocument.SaveAs(documentFile);

            }
            else
            {
                string documentFile = string.Format("{0}\\Competition{2}round{3}{1}", Environment.CurrentDirectory, ".doc", currentTab, currentRound);
                newDocument.SaveAs(documentFile);
            }

            wordApplication.Quit();
            wordApplication.Dispose();

        }

   


    }
  
    public static class MyExtensions
    {
        public static void SortDescending<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
        {
            if (source == null) return;

            Comparer<TKey> comparer = Comparer<TKey>.Default;

            for (int i = source.Count - 1; i >= 0; i--)
            {
                for (int j = 1; j <= i; j++)
                {
                    TSource o1 = source[j - 1];
                    TSource o2 = source[j];
                    if (comparer.Compare(keySelector(o1), keySelector(o2)) < 0)
                    {
                        source.Remove(o1);
                        source.Insert(j, o1);
                    }
                }
            }
        }

        public static void SortAscending<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
        {
            if (source == null) return;

            Comparer<TKey> comparer = Comparer<TKey>.Default;

            for (int i = source.Count - 1; i >= 0; i--)
            {
                for (int j = 1; j <= i; j++)
                {
                    TSource o1 = source[j - 1];
                    TSource o2 = source[j];
                    if (comparer.Compare(keySelector(o1), keySelector(o2)) > 0)
                    {
                        source.Remove(o1);
                        source.Insert(j, o1);
                    }
                }
            }
        }

    }
}
